class Solution {
public:
    int lengthOfLongestSubstring(string s) 
    {
        // 利用hashmap，为什么运行时间和空间都更大？
        // FIXME: 之前的程序用循环来替代这个程序的临时存储 hasmap，因此存储空间更小
        //        但是为什么运行时间也更大？希望能再好好思考一下
        int i = 0, j = 0;
        int length = 0, result = 0;
        int size = s.size();

        unordered_map<char, int> hashmap;

        if(size <= 1) 
            return size;

        while(j < size)
        {
            char c = s[j];

            if(hashmap.find(c) != hashmap.end() && hashmap[c] >= i)
            {
                i = hashmap[c] + 1;
                length = j - i;        
            }

            hashmap[c] = j;
            j++;
            length++;
            result = max(length, result);
        }

        return result;
    }
};